import os
import datetime
from pymongo import MongoClient
from dotenv import load_dotenv
import bcrypt

# 加载环境变量
load_dotenv()

# 获取MongoDB连接URI
mongo_uri = os.getenv('MONGO_URI', 'mongodb://localhost:27017/medical_system')

# 创建MongoDB客户端
client = MongoClient(mongo_uri)

# 测试连接并获取数据库
try:
    # 测试连接
    client.admin.command('ping')
    print("MongoDB连接成功!")

    # 获取数据库名称
    db_name = mongo_uri.split('/')[-1]
    db = client[db_name]
    print(f"已连接到数据库: {db_name}")

    # 创建超级管理员角色
    admin_role = {
        'name': 'admin',
        'displayName': '超级管理员',
        'description': '系统超级管理员，拥有所有权限',
        'permissions': [
            'user:read', 'user:create', 'user:update', 'user:delete',
            'patient:read', 'patient:create', 'patient:update', 'patient:delete',
            'record:read', 'record:create', 'record:update',
            'drug:read', 'drug:create', 'drug:update', 'drug:delete',
            'prescription:read', 'prescription:create', 'prescription:update',
            'appointment:read', 'appointment:create', 'appointment:update', 'appointment:delete'
        ],
        'createdAt': datetime.datetime.utcnow()
    }

    # 检查角色是否已存在
    existing_role = db.roles.find_one({'name': 'admin'})
    if not existing_role:
        db.roles.insert_one(admin_role)
        print("已创建超级管理员角色")
    else:
        print("超级管理员角色已存在")

    # 创建管理员用户
    password_bytes = bcrypt.hashpw('admin123'.encode('utf-8'), bcrypt.gensalt())
    admin_user = {
        'username': 'admin',
        'password': password_bytes.decode('utf-8'),
        'name': '系统管理员',
        'email': 'admin@example.com',
        'phone': '13800000000',
        'role': 'admin',
        'status': 'active',
        'staffId': 'A0001',
        'createdAt': datetime.datetime.utcnow(),
        'updatedAt': datetime.datetime.utcnow(),
        'lastLogin': None
    }

    # 检查用户是否已存在
    existing_user = db.users.find_one({'username': 'admin'})
    if not existing_user:
        db.users.insert_one(admin_user)
        print("已创建管理员用户: admin/admin123")
    else:
        print("管理员用户已存在")

    # 输出创建的集合信息
    collections = db.list_collection_names()
    print(f"数据库中的集合: {collections}")

except Exception as e:
    print(f"MongoDB连接或操作失败: {e}")
finally:
    # 关闭连接
    client.close() 